#ifndef SOCKET_H_
#define SOCKET_H_

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include<string> 

class Socket
{
	private:
		int sockfd;
		bool conectado;
		// Constructor de copia y operator= ocultos (para prevenir descuidos)
		Socket(const Socket&);
		Socket& operator=(const Socket&);
		// Crea un socket a partir de un file descriptor (para el accept)
		Socket(int fd);
		
	public:
		typedef unsigned short port_type;
		// Crea un socket que se conecta al servidor ’host’, puerto ’port’
		Socket(const std::string &, port_type);
		// Crea un socket que escucha conexiones en el puerto ’port’
		explicit Socket(port_type, unsigned int=5);
		// Envía datos por el socket
		int send(const std::string&);
		// Recibe datos del socket
		int recv(std::string&, size_t);
		// Acepta unañueva conexión
		Socket* accept();
		// Para chequear si el socket es válido (por ej: if (socket) ...)
		operator bool () const;
		// Cierra y libera el socket
		~Socket();
};

#endif /*SOCKET_H_*/

